package cn.wolfcode.springbootdemo_2.config;

import cn.wolfcode.springbootdemo_2.domain.MyDataSource;
//import cn.wolfcode.springbootdemo_2.domain.OtherBean;
//import cn.wolfcode.springbootdemo_2.domain.SomeBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;

/*
配置类
功能：替代以前的xxx.xml文件
@Configuration:应用在类上，贴有该注解的类表示spring类
等价于配置文件（ApplicationContext.xml）
@Bean:应用在方法上，等价于<bean>标签，该方法返回的对象会交给spring容器管理
 */
@Configuration

//开启组件扫描器，默认扫描当前类所在的包，及其子包
@ComponentScan(value = "cn.wolfcode.springbootdemo_2.domain")
//引入外部的配置文件
/*
 @properties("classpath:db.properties")==@value("${jdbc.username}")引入外部文件

 @value("${jdbc.username}") applicationContext默认的配置文件
 */
@PropertySource("classpath:db.properties")
public class JavaConfig {
//    /*
//    @Bean：将方法的返回对象交给spring容器管理
//    <bean id="someBean" class="cn.wolfcode.springbootdemo_2.domain" init-method="" destroy-method="" name="" scope="prototype"/>
//    id<==>该方法的方法名
//
//    initMethod:对应bean标签中的 init-method=""  配置bean初始化方法
//    destroyMethod:对应bean标签中的 destroy-method="" 配置bean的销毁方法
//    name:对应bean标签中的  name="" 用户给bean取别名
//    scope:
//     */
//    /*
//    @Bean(initMethod ="init" ,destroyMethod ="destroy" )
//    @Scope(value = "prototype")
//    public SomeBean someBean(){
//        return new SomeBean();
//    }
//     */
//
//    //注入
//    //方式一：在声明SomeBean的方法形参中，直接注入OtherBean对象
////    @Bean
////    public SomeBean someBean(OtherBean otherBean){
////        SomeBean someBean=new SomeBean();
////        someBean.setOtherBean(otherBean);
////        return someBean;
////    }
//    //方式二：调用方法注入
//    OtherBean otherBean=new OtherBean();
//    @Bean
//    public SomeBean someBean1(){
//        SomeBean someBean=new SomeBean();
//        someBean.setOtherBean(otherBean);
//        return someBean;
//    }
        @Value("${jdbc.username}")
        private String username;
        @Value("${jdbc.password}")
        private String password;
    @Bean
    public MyDataSource myDataSource(){
        MyDataSource myDataSource=new MyDataSource();
        myDataSource.setUsername(username);
        myDataSource.setPassword(password);
        System.out.println("---------"+myDataSource.getPassword());
        System.out.println("---------"+myDataSource.getUsername());
        return myDataSource;
    }
}
